#ifndef __studies_architecture_interacting__recover_pwd_t__h__
#define __studies_architecture_interacting__recover_pwd_t__h__



/** @file */


/** @todo */

// ==> C++ Headers

// ==> 3rds Headers

// ==> Our Headers

// ==> Namespaces
using namespace std;

// ==> Macro Constants

// ==> Macro Commands


/** ==> namespace of the organization */
namespace studies {
    /** ==> namespace for the project */
    namespace architecture {
        /** ==> display, interacting, transmitting, message, server, processor,
            object, storer */ 
        namespace interacting {

            // ==> Typedefs 

            // ==> Pre-Declarations

            // ==> Attributes 

            // ==> Functions

            // ==> Classes

            /** 
                @nosubgrouping 
            */
            template <typename t_supplier>
            class recover_pwd_t {

                // ==> recover_pwd_t - Friends

                /** Class allowed to access private members of @p recover_pwd_t, in order
                    to perform tests */
                friend class recover_pwd_tester;

            public:

                // ==> recover_pwd_t - Public Internal Types

                /** */
                typedef t_supplier supplier;

                /** */
                typedef typename supplier::recover_pwd_transmitter transmitter;

                /** */
                typedef typename supplier::recover_pwd_displayer displayer;

                // ==> recover_pwd_t - Public Constructors

                /** Destructor */
                ~recover_pwd_t( ) {}
            

                // ==> recover_pwd_t - Public Accessors

                // ==> recover_pwd_t - Public Helpers

                // ==> recover_pwd_t - Public Processors

                /** */
                void start() {
                    m_displayer.show(*this);
                }

                /** */
                void login_and_email_set(const std::string & p_login,
                                         const std::string & p_email) {
                    m_transmitter.login_and_email_set(p_login, p_email);
                    
                }
                

                // ==> recover_pwd_t - Public Operators

                // ==> recover_pwd_t - Public Attributes


            private:

                // ==> recover_pwd_t - Private Internal Types

                // ==> recover_pwd_t - Private Constructors

                // ==> recover_pwd_t - Private Accessors

                // ==> recover_pwd_t - Private Helpers

                // ==> recover_pwd_t - Private Processors

                // ==> recover_pwd_t - Private Operators

                // ==> recover_pwd_t - Private Attributes
                /** */
                transmitter m_transmitter;

                /** */
                displayer m_displayer;
            };
        }
    }
}
// =============================================================================
// I M P L E M E N T A T I O N
// =============================================================================

using namespace studies::architecture::interacting;


#endif
